Repository navigation
Conversation
…ng any work main received #665 (develop -> main) at 19:09 today, before it was meant to be promoted. develop already holds every commit of it — the merge brings main's own history (the promotion merge commits and the release commit) back into develop so the two are one line again, without rewriting anything or dropping a single commit. [skip ci]
jonit-dev
enabled auto-merge
November 12, 2026 02:18
The record's source digest no longer matched the tree, so `check-native-coverage.spec.ts` and the `budgets` job (check-budgets.ts) both refused it: 'native coverage report is stale: source digest changed to aa2574320d...'. The measured counts move with the tree, not with intent: `src/engine/player/gamepads.cpp` is now covered by the gamepad_standard ctest, and `src/platform/` grew from 69.67% to 70.40%. Total 81.99% to 82.03%.
PRD-880 landed its `#gamepad` convention row in a `[skip ci]` squash, and that row is
mandatory ('a convention missing from the templates' convention index does not exist').
It costs 35 rendered words in every kit, and six kits were over: starter 1,234, minimal and
action-rpg 1,231, collectathon 1,227, platformer 1,211, shooter 1,208. Four of them sat
within four words of 1,200 before the row, so the correct statement of the defect is that
the constant had no headroom, not that the convention is too long.
1,250 is the widest kit plus one median convention row (14.6 words), measured by the
checker itself: `instruction-budget.spec.ts` 9 of 9, `template.spec.ts` 58 of 58, all 16
templates inside budget. The row itself is untouched, so no stated override or marker was
traded away for a word count.
PRD-880 added `gamepad` and `gamepad-idle` to the kit, so `countPlaytestFiles` reads 21 and the spec's pin of 19 failed with 'platformer scenario count changed; update the Charter with the tree'. The prose follows the executable, as the rule asks.
PRD-880 put a 0.2 radial dead zone, rescaled so full tilt is still 1, in front of every standard pad. The injected pad's [0.5, -0.25] has magnitude 0.559, so the move axis reads 0.401 / 0.201 rather than the raw 0.5 / 0.25 the spec pinned.
The spec deleted nothing on restore when `navigator` had no own descriptor: it assigned `globalThis.navigator = undefined`, which throws 'Cannot assign to read only property' on a host that has a getter-only navigator (the CI runner did, this host did not). Delete the own property the test defined instead, which reveals whatever the host had underneath.
The overlay replaces `src/render` in the capture copy, so it must export what the template's own `postprocessing.ts` imports. PRD-871 added `tierShadows` to the template's `quality.ts` and not to the overlay, and `unreal-look-baseline-scaffold.spec.ts` caught it as one unresolved import: 'render/postprocessing.ts: tierShadows from ./quality.js'.
PRD-880 authored 'gamepad', 'controller', 'joypad', 'xbox', '8bitdo' and 'steam deck' on `InputMap` and the spec's predecessor map never learned them: 59 authored aliases against 53 named rows. One request row carries every vendor word, and the four the situations already spell (controller, joypad, xbox, steam deck) are marked `baselineAlreadyRecalled`, the flag the file already uses for the PRD-865 rows. Measured, not assumed: search without the aliases returns nothing for 'add gamepad support' and drops `InputMap` for '8bitdo pad maps the wrong button', so the two that earn recall keep it. `budget.json` is rewritten from the measurement (`caps:recall --update-budget`): 113 to 114 rows, recallAtK 0.938596 (107/114), zeroResultRate 0.043860.
PRD-871's dispose path reached the engine hook through `as unknown as IEngineRateRig`. The quality gate treats a new `as unknown as` without a baseline entry as fatal, so `pnpm quality` — and with it the `budgets` job — reds on the promotion candidate (run 43158306254, attempt 2). `trackAnimationRate` already reaches the same optional hook through `Partial<IEngineRateRig>` and a `typeof` guard; the dispose path now does exactly that, which drops the cast and keeps a malformed rig from throwing on dispose instead of silently skipping the call. Verified: pnpm quality (equality gate clean, finding gone), pnpm typecheck, pnpm exec biome check on the file, and the 184 tests in render-camera-cull/animation/game specs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotion PR for the library, at the owner's request: it must run the full board, and a green
mainpublishes.State
mainhas0.3.13content; npm's latest is0.3.12, so the publish lane (npm-release.yml, PRD-630) publishes0.3.13whenmainis green on this tree.developandmainare content-identical (git diff main developempty). This PR's only unique commit is the re-sync mergec1c25a65, which broughtmain's promotion merges back after the premature Promote develop to main: the crowd and forest world run faster in the engine (#659) #665 merge resetdevelopto01feceec.Why the PR exists at all
#665 (
develop → main) was merged at 19:09:56 with no review and no board — and it rolleddevelopback to01feceec, dropping squash623954c8whilemainkept it. That is repaired: every commit is an ancestor of both branches again.CI
The full board is dispatched on the PR's head SHA
c1c25a65:https://github.com/ThreeNativeHQ/threenative-engine/actions/runs/43140388242
Auto-merge is armed with
--merge(merge commit, asmainrequires). When the required checks pass, this lands andmainpublishes0.3.13.Open follow-ups (not blockers)
developshould not accept a push that resets it to an ancestor ofmain, and promotion should not be mergeable without its board.mainright when it needs publishing.